'''此文件为财务软件导出文件类型一的处理模版。
'''

class FinaceType_1():
    name = 'finace_t1'
    def detect(data):
        '''判断是否特殊日期格式（首行为合并单元格的年度，下一行分成两行分别为月和日）的财务文件。
        return (是否为特殊日期格式,(首行年度所在行索引，首行年度所在列索引))
        ''' 
        if any(data[data=='月']) and any(data[data=='日']):
            month_flag = data[data=='月']
            month_flag = month_flag.dropna(how='all')
            for row_index in month_flag.index:
                row_data = data.loc[row_index,:]
                col_index = list(row_data.index).index(row_data[row_data=='月'].index.values[0])
                if data.iloc[row_index,col_index+1] == '日':
                    if data.iloc[row_index-1,col_index] and data.iloc[row_index-1,col_index].find('年') != -1:
                        return True,(row_index-1,col_index)
        return False,None
    
    def unification(data):
        '''当检测为特殊日期格式（首行为合并单元格的年度，下一行分成两行分别为月和日）时进行统一化处理。
        data为检测所用的头部数据
        '''
        special_date,coord_date = FinaceType_1.detect(data)
        if not special_date:
            raise RuntimeError('当前data中的数据不满中finace_t1格式！')
        data.iloc[coord_date[0],[coord_date[1],coord_date[1]+1]] = ['月','日']
       
    def findLedger(data,file_info):
        '''从头部数据中，查找出科目信息。
        data:通过walkExcelHeaders以此函数进行回调时传入的数据文件的头部数据。
        file_info：此文件在myexcel.findUseColumns中列使用配置后生成的每行数据。
        '''
        tmp = data.dropna(how='all',axis=1)
        for _,line in tmp.iterrows():
            line = line.dropna()
            find = line.str.match('.*科目：(.*)')
            if find.empty:
                continue
            find_km = line[find.values].values
            if len(find_km) != 0:
                return {'文件编号':file_info['文件编号'],
                        '科目名称':find_km[0]}
        return None